package top.itbook.shop;

import top.itbook.Main;
import top.itbook.shop.impl.Commodity;

import java.util.ArrayList;

/**
 * 系统商城防具抽象类，实现商城商品接口
 */
public abstract class Armor implements Commodity {
    // 类静态成员
    final private static ArrayList<Armor> armorShop = Main.armorShop; // 系统防具商城集合地址
    private String name; // 武器名
    private int defense; // 防御值
    private int money; // 价格
    private String info; // 介绍
    private boolean state; // 状态 - 上架则是true，不上架则是false 默认是false

    // 无参构造器
    public Armor(){
        this.name = "请设置商品名称.";
        this.state = false;
        this.info = "暂无介绍。";
    }

    /**
     * 有参构造器
     * <p>当使用此构造器是系统会自动的为info设置为"暂无介绍"，并默认为未上架状态
     * @param name 防具名
     * @param defense 防具对应的防御值
     * @param money 防具价格
     */
    public Armor(String name,int defense,int money){
        this.name = name;
        this.defense = defense;
        this.money = money;
        this.info = "暂无介绍。";
        this.state = false;
    }

    /**
     * 有参构造器
     * @param name 防具名
     * @param defense 防御值
     * @param money 防具价格
     * @param info 防具介绍
     */
    public Armor(String name,int defense,int money,String info){
        this.name = name;
        this.defense = defense;
        this.money = money;
        this.info = info;
        this.state = false;
    }

    /**
     * 有参构造器
     * @param name 防具名
     * @param defense 防御值
     * @param money 防具价格
     * @param info 防具介绍
     * @param state 是否上架 - false为下架
     */
    public Armor(String name,int defense,int money,String info,boolean state){
        this.name = name;
        this.defense = defense;
        this.money = money;
        this.info = info;
        this.state = state;
    }

    /**
     * 将商品添加进系统商城中
     * @return 是否成功添加
     */
    @Override
    public boolean addCommodity(){
        return armorShop.add(this);
    }

    /**
     * 根据 传入的对象去查找对应的集合中的商品元素并删除
     * @param commodity 要删除的商品对象
     * @return 是否成功删除，成功则返回true
     */
    @Override
    public boolean delCommodity(Commodity commodity){
        // 非空校验
        if (commodity == null){
            return false;
        }
        // 判断实际类型
        if (commodity instanceof Armor){
            // 传入的类型为防具类型
            for (Armor armor : armorShop) {
                if (armor == commodity){
                    return armorShop.remove(commodity);
                }
            }
            return false;
        }else{
            return  false;
        }
    }

    @Override
    public boolean delCommodity(String name){
        for (Armor armor : armorShop) {
            if (armor.getName().equals(name)){
                return armorShop.remove(armor);
            }
        }
        return false;
    }

    public String getName(){
        return name;
    }

    public int getDefense(){
        return defense;
    }

    public int getMoney(){
        return money;
    }

    public String getInfo(){
        return info;
    }

    public boolean getState(){
        return state;
    }

    @Override
    public String toString() {
        return "Armor{" +
                "name='" + name + '\'' +
                ", defense=" + defense +
                ", money=" + money +
                ", info='" + info + '\'' +
                ", state=" + state +
                '}';
    }
}
